﻿using System;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;

namespace CommonComponents.ExceptionHandling
{
    /// <summary>
    /// Administrador de excepciones. Administra las excepciones según la capa de la
    /// arquitectura, el código de la excepción está en la enumerción interna
    /// </summary>
    public static class ExceptionHandlingManager
    {

        #region Attributes
        /// <summary>
        /// Códigos de las políticas de excepciones
        /// </summary>
        public enum ExceptionPolicyType
        {
            PresentationLayer = 0,
            BusinessLayer,
            DataLayer
        }

        /// <summary>
        /// Nombres de las políticas de excepciones
        /// </summary>
        private static readonly string[] PolicyNames = { "PresentationLayer", "BusinessLayer", "DataLayer" };
        #endregion

        #region Public Methods
        /// <summary>
        /// Administra la excepción dada según su código de política de excepción
        /// </summary>
        /// <param name="exception">Excepción a administrar</param>
        /// <param name="exceptionPolicyType">Código de política de excepción</param>
        public static void ManageException(Exception exception, ExceptionPolicyType exceptionPolicyType)
        {
            ExceptionPolicy.HandleException(exception, PolicyNames[(int)exceptionPolicyType]);
        }
        #endregion

    }
}
